<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <title>地狱回调与promise</title>
</head>

<body>
  <script>
    //   回调地狱
    //   function getHotpot(fn) {
    //     setTimeout(() => {
    //       fn("火锅");
    //     }, 1000);
    //   }

    //   function getTea(fn) {
    //     setTimeout(() => {
    //       fn("奶茶");
    //     }, 500);
    //   }

    //   function getFruit(fn) {
    //     setTimeout(() => {
    //       fn("水果");
    //     }, 100);
    //   }

    //   //火锅-->奶茶-->水果
    //   getHotpot(function (data) {
    //     console.log(data);
    //     getTea(function (data) {
    //       console.log(data);
    //       getFruit(function (data) {
    //         console.log(data);
    //       });
    //     });
    //   });

    //resolve可以将异步数据传递出去
    // let p = new Promise(function(resolve){
    //     resolve("hello world");
    // })

    // p.then(function(data){
    //     console.log(data);
    // })

    function getHotpot() {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve("火锅");
        }, 1000);
      });
    }

    function getTea() {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve("奶茶");
        }, 500);
      });
    }

    function getFruit() {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve("水果");
        }, 100);
      });
    }

    //利用promise解决回调地狱问题
    getHotpot()
      .then((data) => {
        console.log(data);
        return getTea();
      })
      .then((data) => {
        console.log(data);
        return getFruit();
      })
      .then((data) => {
        console.log(data);
      });

    //利用async解决回调地狱问题
    // async function getData() {
    //   // 捕获异常
    //   try {
    //     //直接获取resolve传递出来的异步数据
    //     let hotpot = await getHotpot();
    //     console.log(hotpot);
    //     let tea = await getTea();
    //     console.log(tea);
    //     let fruit = await getFruit();
    //     console.log(fruit);
    //   } catch (error) {
    //     console.log(error);
    //   }
    // }
    // getData();




    const p1 = new Promise((resolve, reject) => {
      resolve('hello');
    })
    p1.then(value => {
      console.log(value);
    }, error => {
      console.log(error);
    })

    const p2 = new Promise((resolve, reject) => {
      resolve('world');
    })

    Promise.all([p1, p2]).then((res) => {
      console.log(res);
    })

    async function test() {
      return 'hello world'
    }

    const result = test();
    result.then(res => {
      console.log(res);
    })


  </script>
</body>

</html>